/*MyPhotoIndex Free Photo Organizer <www.myphotoindex.com>
  Copyright (C) <2006-2009>  <Asaf Yarkoni asaf@yarkoni.net>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Threading;
using System.IO;
using System.Drawing.Imaging;

namespace MyPhotoIndex.Interfaces.Imaging
{
    public interface IImageInstance : IDisposable
    {
        event EventHandler<ImageDataChangedArgs> ImageDataChangedEvent;
        event EventHandler<EventArgs> ImageDrawingRectCahngedEvent;
        event EventHandler<EventArgs> DisposingEvent;

        Image Image
        {
            get;
            set;
        }

        IImageData ImageData { get; }

        bool Disposed
        {
            get;
            set;
        }

        Rectangle FrameDrawingRect
        {
            get;
            set;
        }

        Rectangle ImageDrawingRect
        {
            get;
            set;
        }

        //bool ValidateThumbnailSize()
        //{
        //    return !LoadImageFromDisk(false);
        //}

        Size ImageSize
        {
            get;
            set;
        }

        //public int ImageId
        //{
        //    get { return m_imageId; }
        //    set { m_imageId = value; }
        //}

        //#region IDisposable Members

        //~IImageInstance()
        //{
        //    Dispose(false);
        //}

        //public void Dispose()
        //{
        //    Dispose(true);
        //    GC.SuppressFinalize(this);
        //}

        //protected virtual void Dispose(bool disposing)
        //{
        //    if (null != DisposingEvent)
        //    {
        //        DisposingEvent.Invoke(this, EventArgs.Empty);
        //    }

        //    if (disposing)
        //    {
        //        if (m_imageLoaded)
        //        {
        //            if (m_image == m_imageData.Thumbnail)
        //            {
        //            }
        //            m_image.Dispose();
        //        }

        //        m_imageData.ImageDataChangedEvent -= m_imageChangedEventHandler;
        //        // m_imageData.Dispose();
        //    }

        //    m_disposed = true;
        //}

        //#endregion

        //public void Rotate(RotateFlipType rotationType)
        //{
        //    Storage.Instance[m_imageId].Rotate(rotationType);
        //    LoadImageFromDisk(true);
        //}
    }
}
